package testDay;

public class day3_2 {
    /*
     * 1.滑动窗口：设置两个指针left，right标记窗口大小，返回值res赋nums.length
     * 2.循环right到nums.length，计算窗口元素值累计和sum，
     * 3.设置while循环left的值，比较sum与target，若sum大于target，res=min(原res,窗口长度)，sum减掉left值，left+1
     *   当sum<target，退出while循环，外层right+1
     * 4.判断若sum累计数组和小于target，返回0，否则返回res
     * */
    public int minSubArrayLen(int target, int[] nums) {

        int left = 0;
        int sum = 0;
        int res = nums.length;
        //判断左指针是否移动过，若没有说明nums累计和<target
        boolean temp = false;
        for (int right = 0; right < nums.length; right++) {
            sum += nums[right];
            while (sum >= target) {
                temp = true;
                res = Math.min(res, right - left + 1);
                sum -= nums[left];
                left++;
            }
        }
        if (!temp) {
            res = 0;
        }
        return res;
    }
}
